/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.util.Collection;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import model.dominio.Aluno;

/**
 *
 * @author ronan
 */
public class DaoAluno {

    //String para criar nova linha no arquivo, deve se usar esse código pois a quebra de linha no linux e no windows é diferente.
    static final String NL = System.getProperty("line.separator");
    //nome do arquivo de texto que serão salvos os dados do objeto
    static final String ARQUIVO = "BDAluno.txt";

    public DaoAluno() {
        try {
            File f = new File(ARQUIVO);

            FileWriter fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.print("");
            pw.flush();
            pw.close();
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
    }
    
    public void cadastrar(Aluno aluno) {
        
        File f = new File(ARQUIVO);
        ArrayList<Aluno> listaDeAluno = obterLista();
        
        try {
            for (Aluno aluno1 : listaDeAluno) {
            if (aluno.getCpf().equals(aluno1.getCpf())) {
                System.out.println("\n    Aluno já cadastrado.");
                return;
                }
            }
            int codigoGerado = 1;
            if (f.exists()) {
                FileReader fr = new FileReader(f);
                LineNumberReader lnr = new LineNumberReader(fr);
                lnr.skip(f.length());
                codigoGerado = lnr.getLineNumber() + 1;
                lnr.close();
            }

            aluno.setCodigoAluno(codigoGerado);
            FileWriter fw = new FileWriter(f, true);
            PrintWriter pw = new PrintWriter(fw);
            pw.println(aluno.toString());
            pw.flush();
            pw.close();


        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao gravar no arquivo, por favor contate o administrador.");
        }
    }

    public  Aluno buscar(String palavraChave) {
        FileReader fr = null;
        String linha = "";
        
        try {
            File f = new File(ARQUIVO);
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);

            while ((linha = bfr.readLine()) != null) {
                if (linha.contains(palavraChave)) {
                    return new Aluno(linha);
                }
            }
            
           if ((linha = bfr.readLine()) == null){
               System.out.println("O nome ou o CPF digitado está errado, ou usuário não existe.");
               return new Aluno(); 
           }
               
        } catch (FileNotFoundException ex) {
            System.out.println("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
            System.out.println("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
        }
        return null;
    }
    
    public ArrayList<Aluno> obterLista() {
        String linha = "";
        FileReader fr = null;
        
        ArrayList<Aluno> alunos = new ArrayList<Aluno>();
        
        try {
            File f = new File(ARQUIVO);
            fr = new FileReader(f);
            BufferedReader bfr = new BufferedReader(fr);
          
            while ((linha = bfr.readLine()) != null) {
                alunos.add(new Aluno(linha));
            }
            return alunos;
        } catch (FileNotFoundException ex) {
                System.out.println("O arquivo com os dados do objeto não existe.");
        } catch (IOException ex) {
                System.out.println("Ocorreu uma falha ao ler o arquivo, por favor contate o administrador.");
          }
         return null;
    }    
    
}
